Don't remove composited childrens area when processing updates
authorAlexander Larsson <alexl@redhat.com>
Wed, 17 Dec 2008 18:45:56 +0000 (19:45 +0100)
committerAlexander Larsson <alex@localhost.localdomain>
Thu, 2 Apr 2009 08:15:16 +0000 (10:15 +0200)
Handle shape when processing updates
Make sure we reset the old clips before setting new cairo clips

gdk/gdkwindow.c

index 01e4ef71bd44a3ba50248b95cf7e206d6888b9af..392a515162ef3f463f91605f019c81673b4efcae 100644 (file)
@@ -3986,6 +3986,8 @@ gdk_window_set_cairo_clip (GdkDrawable *drawable,
     {
       cairo_save (cr);
       cairo_identity_matrix (cr);
+
+      cairo_reset_clip (cr);
       
       cairo_new_path (cr);
       gdk_cairo_region (cr, private->clip_region);
@@ -4004,6 +4006,8 @@ gdk_window_set_cairo_clip (GdkDrawable *drawable,
          cairo_save (cr);
          cairo_identity_matrix (cr);
          
+         cairo_reset_clip (cr);
+         
          cairo_new_path (cr);
          gdk_cairo_region (cr, paint->region);
          cairo_restore (cr);
@@ -4166,7 +4170,7 @@ gdk_window_process_updates_recurse (GdkWindow *window,
     {
       child = l->data;
       
-      if (!GDK_WINDOW_IS_MAPPED (child) || child->input_only)
+      if (!GDK_WINDOW_IS_MAPPED (child) || child->input_only || child->composited)
        continue;
 
       /* Ignore offscreen children, as they don't draw in their parent and
@@ -4180,7 +4184,9 @@ gdk_window_process_updates_recurse (GdkWindow *window,
       r.height = child->height;
       
       child_region = gdk_region_rectangle (&r);
-      
+      if (child->shape)
+       gdk_region_intersect (child_region, child->shape);
+       
       if (child->impl == private->impl) 
        {
          /* Client side child, expose */